package cn.yh.shop.admin.action;

import java.util.List;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.fastjson.JSONObject;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import cn.yh.shop.admin.model.Admin;
import cn.yh.shop.admin.model.Menu;
import cn.yh.shop.admin.service.IAdminService;
import cn.yh.shop.admin.service.IMenuService;
import cn.yh.shop.util.ShiroUtils;


/**
 * @Description:admin的控制类
 * @author:"许荣斐"
 * @time:2016年12月14日 下午5:30:59
 */
public class AdminAction extends ActionSupport implements ModelDriven<Admin >{

	private static final long serialVersionUID = 1L;

	/**
	 *  logger日志
	 */
	private static Logger logger = LogManager.getLogger(AdminAction.class);
	
	@Autowired
	private IMenuService menuService;
	@Autowired
    private IAdminService adminService;
	
	/**
	 * menuList : 菜单列表
	 */
	List<Menu> menuList;
	
	/**
	 * 实体模型
	 */
	private Admin admin;
	
	/**
	 * 输出json
	 */
	JSONObject jsob;
	
	/**
	 * json 的get方法
	 */
	public JSONObject getJsob() {
		return jsob;
	}
	
	/**
	 * menuList的get方法法
	 */
	public List<Menu> getmenuList() {
		return menuList;
	}

	/**
	 * @param admin the admin to set
	 */
	public void setAdmin(Admin admin) {
		this.admin = admin;
	}

	/**
	 * @param menuList the menuList to set
	 */
	public void setmenuList(List<Menu> menuList) {
		menuList = menuList;
	}

	public String execute() {
		return SUCCESS;
	}
	
	/**
	 * @Description:登录
	 * @author: "许荣斐"
	 * @time:2016年12月21日 上午9:30:46
	 */
	public String  login(){
		jsob=new JSONObject();
		try{
			Subject subject = ShiroUtils.getSubject();
			//未加密
			logger.info("登录时:"+admin);
			UsernamePasswordToken token = new UsernamePasswordToken(admin.getName(), admin.getPwd());
			subject.login(token);
			Admin user = adminService.queryByUserName(admin.getName());
			ActionContext.getContext().getSession().put("admin", user);
			jsob.put("result", "success");
		}catch (AuthenticationException e) {
			e.printStackTrace();
			jsob.put("result", "usererror");
			logger.info("login error!"+e.toString());
		}
	    
		return SUCCESS;
	}
	
	/**
	 * @Description:返回生成主菜单
	 * @author: "许荣斐"
	 * @time:2016年12月21日 上午9:43:43
	 */
	public String menu(){
		try {
			Map<String, Object> session = ActionContext.getContext().getSession();
			Admin admn = (Admin)session.get("admin");
			logger.info(admn);
			menuList = menuService.getUserMenuList(admn.getId());
			session.put("menu", menuList);
			session.put("user", admn);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}
	
	/**
	 * @Description:退出
	 * @return
	 * @author: "许荣斐"
	 * @time:2016年12月21日 上午9:30:50
	 */
	public String logout() {
		ShiroUtils.logout();
		return SUCCESS;
	}

	@Override
	public Admin getModel() {
		
		if (admin==null) {
			admin=new Admin();
		}
		
		return admin;
	}

}
